{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "pathboost=\"F:\\\\anaconada3\\\\lib\\\\site-packages\" #要把你安装的xgboost路径添加到sys里面才可以导入\n",
    "sys.path.append(pathboost)\n",
    "import xgboost as xgb\n",
    "from xgboost.sklearn import XGBClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn import cross_validation,metrics\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import GridSearchCV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pylab as plt\n",
    "from matplotlib.pylab import  rcParams\n",
    "rcParams['figure.figsize']=12,4\n",
    "import seaborn as sns\n",
    "import pandas as pd  #读数据\n",
    "import numpy as np   #存储\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "train=pd.read_csv('FE_LightGBM_train.csv')\n",
    "test=pd.read_csv('FE_LightGBM_test.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "target='Disbursed'\n",
    "IDcol='ID'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "def modelfit(alg, dtrain, predictors,useTrainCV=True, cv_folds=5, early_stopping_rounds=50):  #注意这个版本删去\"show_progress=False\",以及将“alg.booster()”变成\"alg.get_booster()\n",
    "\n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params()\n",
    "        xgtrain = xgb.DMatrix(dtrain[predictors].values, label=dtrain[target].values)\n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], nfold=cv_folds,metrics='auc', early_stopping_rounds=early_stopping_rounds)\n",
    "        alg.set_params(n_estimators=cvresult.shape[0])\n",
    "\n",
    "    #Fit the algorithm on the data\n",
    "    alg.fit(dtrain[predictors], dtrain['Disbursed'],eval_metric='auc')\n",
    "\n",
    "    #Predict training set:\n",
    "    dtrain_predictions = alg.predict(dtrain[predictors])\n",
    "    dtrain_predprob = alg.predict_proba(dtrain[predictors])[:,1]\n",
    "\n",
    "    #Print model report:\n",
    "    print (\"\\nModel Report\")\n",
    "    print (\"Accuracy : %.4g\" % metrics.accuracy_score(dtrain['Disbursed'].values, dtrain_predictions))\n",
    "    print (\"AUC Score (Train): %f\" % metrics.roc_auc_score(dtrain['Disbursed'], dtrain_predprob))\n",
    "\n",
    "    feat_imp = pd.Series(alg.get_booster().get_fscore()).sort_values(ascending=False)\n",
    "    feat_imp.plot(kind='bar', title='Feature Importances')\n",
    "    plt.ylabel('Feature Importance Score')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Model Report\n",
      "Accuracy : 0.9854\n",
      "AUC Score (Train): 0.920624\n"
     ]
    },
    {
     "data": {
      "image/png": "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4q91cfF68yib7AZ8q253CbCipNWbKl9ERERERL812uda0qKSZgF3A+fbvrQ+9ClJV0n6gqQl67o1gdu6Np9d1w19zQMlzZQ0c86cOU0WPyIiIiJivjRaubb9mO1NgbWALSQ9D/gIsBGwObAy8OH6dA33EsO85tG2p9uevuqqqzZU8oiIiIiI+ddKthDb9wM/B15l+87a9eMR4Hhgi/q02cDaXZutBdzRRvkiIiIiIvqhscq1pFUlrVjvLw1sD1zf6Udds4PsDlxTNzkDeLOKrYAHbN/ZVPkiIiIiIvqtyWwhqwMzJC1KqcSfYvtMST+TtCqlG8gs4F31+WdT0vDdSEnF99YGyxYRERER0XeNVa5tXwVsNsz6bUd4voGDmipPRERERETTMkNjRERERESfpHIdEREREdEnqVxHRERERPRJKtcREREREX2SynVERERERJ+kch0RERER0SepXEdERERE9Ekq1xERERERfZLKdUREREREn6RyHRERERHRJ6lcR0RERET0SSrXERERERF9stigCzApHbbCQmz7QP/KERERERGtSst1RERERESfpHIdEREREdEnqVxHRERERPRJKtcREREREX2SynVERERERJ+kch0RERER0SepXEdERERE9EljlWtJS0m6TNKVkq6V9Im6fj1Jl0r6g6STJS1R1y9Zl2+sj09rqmwREREREU1osuX6EWBb2y8ANgVeJWkr4DPAF2xvANwHHFCffwBwn+1/Ab5QnxcRERERMWE0Vrl28de6uHi9GdgWOK2unwHsXu/vVpepj28nSU2VLyIiIiKi3xrtcy1pUUmzgLuB84GbgPttP1qfMhtYs95fE7gNoD7+APD0JssXEREREdFPjVaubT9me1NgLWALYOPhnlb/DtdK7aErJB0oaaakmXPmzOlfYSMiIiIiFlIr2UJs3w/8HNgKWFHSYvWhtYA76v3ZwNoA9fEVgHuHea2jbU+3PX3VVVdtuugRERERET3ruXIt6Wnz88KSVpW0Yr2/NLA9cB1wIbBnfdr+wI/q/TPqMvXxn9l+Sst1RERERMR4NWblWtJLJP2eUjFG0gskfa2H114duFDSVcBvgfNtnwl8GPiApBspfaqPrc8/Fnh6Xf8B4JD53puIiIiIiAFabOyn8AXglZSWZWxfKenlY21k+ypgs2HW30zpfz10/d+BvXooT0RE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\n",
      "text/plain": [
       "<Figure size 864x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "predictors = [x for x in train.columns if x not in [target, IDcol]]\n",
    "xgb1 = XGBClassifier(\n",
    " learning_rate =0.1,\n",
    " n_estimators=1000,\n",
    " max_depth=5,\n",
    " min_child_weight=1,\n",
    " gamma=0,\n",
    " subsample=0.8,\n",
    " colsample_bytree=0.8,\n",
    " objective= 'binary:logistic', #两类分类所以设置为logistic，多类不一样，详见otto\n",
    " nthread=4,\n",
    " scale_pos_weight=1,\n",
    " seed=27)\n",
    "modelfit(xgb1, train, predictors)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.00932232 0.016628   0.00014795 ... 0.00496247 0.05687969 0.01524012]\n"
     ]
    }
   ],
   "source": [
    "\n",
    "dtest_predprob = xgb1.predict_proba(test[predictors])[:,1]\n",
    "print(dtest_predprob)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0. 0. 0. ... 0. 0. 0.]\n"
     ]
    }
   ],
   "source": [
    "dtest_predictions = xgb1.predict(test[predictors])\n",
    "print(dtest_predictions)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "({'mean_fit_time': array([3.43757734, 3.34075789, 3.55899272, 5.38221788, 5.25686235,\n",
       "         5.45811028, 7.65733404, 6.84715037, 6.24181724, 8.21366577,\n",
       "         7.93039627, 7.52290702]),\n",
       "  'std_fit_time': array([0.06544388, 0.13512579, 0.12474311, 0.09576892, 0.23148259,\n",
       "         0.09025727, 0.13390895, 0.3522185 , 0.17499785, 0.12389179,\n",
       "         0.1501994 , 0.68517048]),\n",
       "  'mean_score_time': array([0.04360995, 0.04540925, 0.04621067, 0.05921369, 0.05701389,\n",
       "         0.06321259, 0.07221675, 0.0650147 , 0.06601448, 0.08181853,\n",
       "         0.07541766, 0.07221642]),\n",
       "  'std_score_time': array([0.00102029, 0.00422514, 0.00318849, 0.00213608, 0.00141512,\n",
       "         0.00746747, 0.00240022, 0.0030329 , 0.00244916, 0.00483468,\n",
       "         0.00119975, 0.00842561]),\n",
       "  'param_max_depth': masked_array(data=[3, 3, 3, 5, 5, 5, 7, 7, 7, 9, 9, 9],\n",
       "               mask=[False, False, False, False, False, False, False, False,\n",
       "                     False, False, False, False],\n",
       "         fill_value='?',\n",
       "              dtype=object),\n",
       "  'param_min_child_weight': masked_array(data=[1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5],\n",
       "               mask=[False, False, False, False, False, False, False, False,\n",
       "                     False, False, False, False],\n",
       "         fill_value='?',\n",
       "              dtype=object),\n",
       "  'params': [{'max_depth': 3, 'min_child_weight': 1},\n",
       "   {'max_depth': 3, 'min_child_weight': 3},\n",
       "   {'max_depth': 3, 'min_child_weight': 5},\n",
       "   {'max_depth': 5, 'min_child_weight': 1},\n",
       "   {'max_depth': 5, 'min_child_weight': 3},\n",
       "   {'max_depth': 5, 'min_child_weight': 5},\n",
       "   {'max_depth': 7, 'min_child_weight': 1},\n",
       "   {'max_depth': 7, 'min_child_weight': 3},\n",
       "   {'max_depth': 7, 'min_child_weight': 5},\n",
       "   {'max_depth': 9, 'min_child_weight': 1},\n",
       "   {'max_depth': 9, 'min_child_weight': 3},\n",
       "   {'max_depth': 9, 'min_child_weight': 5}],\n",
       "  'split0_test_score': array([0.83533996, 0.83529149, 0.83462288, 0.83539461, 0.83918276,\n",
       "         0.83471434, 0.83288424, 0.83392557, 0.83802287, 0.82516652,\n",
       "         0.81962636, 0.82439902]),\n",
       "  'split1_test_score': array([0.84291762, 0.84167141, 0.84233076, 0.84603464, 0.84971166,\n",
       "         0.85365392, 0.85287669, 0.85018796, 0.85391048, 0.84713337,\n",
       "         0.8486159 , 0.84970228]),\n",
       "  'split2_test_score': array([0.85323891, 0.85262915, 0.8544334 , 0.85627608, 0.85814139,\n",
       "         0.85896714, 0.85542746, 0.85879174, 0.85913224, 0.85216585,\n",
       "         0.8516184 , 0.85187383]),\n",
       "  'split3_test_score': array([0.86056853, 0.85943523, 0.8600001 , 0.85805639, 0.85781029,\n",
       "         0.85933708, 0.84867394, 0.8506413 , 0.85344305, 0.84414038,\n",
       "         0.84382299, 0.84749633]),\n",
       "  'split4_test_score': array([0.8434008 , 0.84528861, 0.84636188, 0.84525061, 0.8445713 ,\n",
       "         0.84742551, 0.83747141, 0.83985591, 0.84194643, 0.83818562,\n",
       "         0.83711798, 0.84017938]),\n",
       "  'mean_test_score': array([0.84709317, 0.84686318, 0.8475498 , 0.84820247, 0.84988348,\n",
       "         0.8508196 , 0.84546675, 0.8466805 , 0.84929101, 0.84135835,\n",
       "         0.84016033, 0.84273017]),\n",
       "  'std_test_score': array([0.00881547, 0.00842188, 0.00892355, 0.00824302, 0.00739975,\n",
       "         0.0091418 , 0.00879379, 0.00876283, 0.00795415, 0.00927506,\n",
       "         0.01137628, 0.00997468]),\n",
       "  'rank_test_score': array([ 6,  7,  5,  4,  2,  1,  9,  8,  3, 11, 12, 10]),\n",
       "  'split0_train_score': array([0.88437053, 0.88297731, 0.8830673 , 0.937671  , 0.92909124,\n",
       "         0.92657887, 0.97728086, 0.96861861, 0.95939725, 0.99596061,\n",
       "         0.98784802, 0.97860209]),\n",
       "  'split1_train_score': array([0.88448281, 0.88274763, 0.88224739, 0.93682464, 0.93062883,\n",
       "         0.92487319, 0.98013595, 0.96794983, 0.95756895, 0.99515546,\n",
       "         0.98675488, 0.98043248]),\n",
       "  'split2_train_score': array([0.8825934 , 0.88121148, 0.87981608, 0.93678702, 0.92749624,\n",
       "         0.92343752, 0.97825721, 0.96723426, 0.95891584, 0.99532239,\n",
       "         0.98628876, 0.97859404]),\n",
       "  'split3_train_score': array([0.88227172, 0.88113942, 0.88052875, 0.93772457, 0.92974073,\n",
       "         0.92395562, 0.9794299 , 0.97064558, 0.96140406, 0.99686717,\n",
       "         0.98979764, 0.98294444]),\n",
       "  'split4_train_score': array([0.88572092, 0.88471552, 0.88301227, 0.94131443, 0.93153951,\n",
       "         0.92640937, 0.98185569, 0.97140124, 0.9638041 , 0.99682792,\n",
       "         0.98954996, 0.98483932]),\n",
       "  'mean_train_score': array([0.88388788, 0.88255827, 0.88173436, 0.93806433, 0.92969931,\n",
       "         0.92505091, 0.97939192, 0.96916991, 0.96021804, 0.99602671,\n",
       "         0.98804785, 0.98108247]),\n",
       "  'std_train_score': array([0.00128332, 0.0013185 , 0.00132712, 0.00167342, 0.00137661,\n",
       "         0.00126604, 0.00157285, 0.00159347, 0.00217502, 0.0007222 ,\n",
       "         0.00142297, 0.00246365])},\n",
       " {'max_depth': 5, 'min_child_weight': 5},\n",
       " 0.8508195979070106)"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "param_test1 = {\n",
    " 'max_depth':range(3,10,2),\n",
    " 'min_child_weight':range(1,6,2)\n",
    "}\n",
    "gsearch1 = GridSearchCV(estimator = XGBClassifier( learning_rate =0.1, n_estimators=140, max_depth=5,\n",
    " min_child_weight=1, gamma=0, subsample=0.8, colsample_bytree=0.8,\n",
    " objective= 'binary:logistic', nthread=4, scale_pos_weight=1, seed=27), \n",
    " param_grid = param_test1, scoring='roc_auc',n_jobs=4,iid=False, cv=5)\n",
    "gsearch1.fit(train[predictors],train[target])\n",
    "gsearch1.cv_results_, gsearch1.best_params_, gsearch1.best_score_    #这里也要注意这个版本grid_scores_在sklearn0.20版本中已被删除，取而代之的是cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "({'mean_fit_time': array([3.83246598, 3.85387263, 3.80366201, 4.64905367, 4.56263227,\n",
       "         4.74820728, 5.48119135, 5.47745647, 5.90099506]),\n",
       "  'std_fit_time': array([0.10291142, 0.15297306, 0.12375996, 0.11634455, 0.09558884,\n",
       "         0.18007173, 0.07035224, 0.31170477, 0.77637989]),\n",
       "  'mean_score_time': array([0.04741063, 0.04841065, 0.04761   , 0.05341158, 0.05381198,\n",
       "         0.05301199, 0.06101413, 0.06161437, 0.05861297]),\n",
       "  'std_score_time': array([0.00149675, 0.00265379, 0.0014969 , 0.0018555 , 0.0036561 ,\n",
       "         0.00141428, 0.00316292, 0.00272917, 0.00697516]),\n",
       "  'param_max_depth': masked_array(data=[4, 4, 4, 5, 5, 5, 6, 6, 6],\n",
       "               mask=[False, False, False, False, False, False, False, False,\n",
       "                     False],\n",
       "         fill_value='?',\n",
       "              dtype=object),\n",
       "  'param_min_child_weight': masked_array(data=[4, 5, 6, 4, 5, 6, 4, 5, 6],\n",
       "               mask=[False, False, False, False, False, False, False, False,\n",
       "                     False],\n",
       "         fill_value='?',\n",
       "              dtype=object),\n",
       "  'params': [{'max_depth': 4, 'min_child_weight': 4},\n",
       "   {'max_depth': 4, 'min_child_weight': 5},\n",
       "   {'max_depth': 4, 'min_child_weight': 6},\n",
       "   {'max_depth': 5, 'min_child_weight': 4},\n",
       "   {'max_depth': 5, 'min_child_weight': 5},\n",
       "   {'max_depth': 5, 'min_child_weight': 6},\n",
       "   {'max_depth': 6, 'min_child_weight': 4},\n",
       "   {'max_depth': 6, 'min_child_weight': 5},\n",
       "   {'max_depth': 6, 'min_child_weight': 6}],\n",
       "  'split0_test_score': array([0.83587869, 0.83677288, 0.83754004, 0.83631738, 0.83471434,\n",
       "         0.83553604, 0.83922792, 0.83424021, 0.83445653]),\n",
       "  'split1_test_score': array([0.84503527, 0.84917338, 0.84374801, 0.85410336, 0.85365392,\n",
       "         0.85163665, 0.85059521, 0.85026754, 0.85034105]),\n",
       "  'split2_test_score': array([0.85764859, 0.85922394, 0.85911349, 0.85917318, 0.85896714,\n",
       "         0.85794072, 0.86026087, 0.85777619, 0.85851322]),\n",
       "  'split3_test_score': array([0.85938816, 0.85882823, 0.85981965, 0.85646669, 0.85933708,\n",
       "         0.85820102, 0.85901705, 0.85820125, 0.85817944]),\n",
       "  'split4_test_score': array([0.84751963, 0.84486665, 0.84741334, 0.84649228, 0.84742551,\n",
       "         0.84719375, 0.84355106, 0.84216935, 0.84507671]),\n",
       "  'mean_test_score': array([0.84909407, 0.84977302, 0.84952691, 0.85051058, 0.8508196 ,\n",
       "         0.85010164, 0.85053042, 0.84853091, 0.84931339]),\n",
       "  'std_test_score': array([0.0086342 , 0.00854111, 0.00871081, 0.00825854, 0.0091418 ,\n",
       "         0.00836684, 0.00828453, 0.00923797, 0.00897748]),\n",
       "  'rank_test_score': array([8, 5, 6, 3, 1, 4, 2, 9, 7]),\n",
       "  'split0_train_score': array([0.90485932, 0.9042539 , 0.90244678, 0.92816355, 0.92657887,\n",
       "         0.92382749, 0.9473965 , 0.94392766, 0.94251705]),\n",
       "  'split1_train_score': array([0.90248025, 0.90455521, 0.90162158, 0.92699098, 0.92487319,\n",
       "         0.92152754, 0.94631091, 0.94281201, 0.94127985]),\n",
       "  'split2_train_score': array([0.90115789, 0.90011264, 0.90010007, 0.92416154, 0.92343752,\n",
       "         0.92121259, 0.94724476, 0.94161919, 0.93888201]),\n",
       "  'split3_train_score': array([0.90461934, 0.90374122, 0.90176865, 0.92816591, 0.92395562,\n",
       "         0.92331755, 0.94718034, 0.94510935, 0.94200843]),\n",
       "  'split4_train_score': array([0.90558131, 0.90553176, 0.90444498, 0.93008602, 0.92640937,\n",
       "         0.92496005, 0.94928291, 0.94761353, 0.94489554]),\n",
       "  'mean_train_score': array([0.90373962, 0.90363895, 0.90207641, 0.9275136 , 0.92505091,\n",
       "         0.92296904, 0.94748308, 0.94421635, 0.94191658]),\n",
       "  'std_train_score': array([0.00165353, 0.00185719, 0.00141101, 0.00194806, 0.00126604,\n",
       "         0.00141319, 0.00097666, 0.00205616, 0.00194202])},\n",
       " {'max_depth': 5, 'min_child_weight': 5},\n",
       " 0.8508195979070106)"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "param_test2 = {\n",
    " 'max_depth':[4,5,6],\n",
    " 'min_child_weight':[4,5,6]\n",
    "}\n",
    "gsearch2 = GridSearchCV(estimator = XGBClassifier( learning_rate=0.1, n_estimators=140, max_depth=5,\n",
    " min_child_weight=2, gamma=0, subsample=0.8, colsample_bytree=0.8,\n",
    " objective= 'binary:logistic', nthread=4, scale_pos_weight=1,seed=27), \n",
    " param_grid = param_test2, scoring='roc_auc',n_jobs=4,iid=False, cv=5)\n",
    "gsearch2.fit(train[predictors],train[target])\n",
    "gsearch2.cv_results_, gsearch2.best_params_, gsearch2.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "({'mean_fit_time': array([4.67045636, 4.86030107, 5.03434105, 5.33440719, 4.58817711]),\n",
       "  'std_fit_time': array([0.14869775, 0.12878226, 0.11072016, 0.06583154, 0.73065926]),\n",
       "  'mean_score_time': array([0.05361228, 0.05621281, 0.05641184, 0.05781341, 0.05169868]),\n",
       "  'std_score_time': array([0.00185494, 0.00231583, 0.0014972 , 0.00292618, 0.00589125]),\n",
       "  'param_gamma': masked_array(data=[0.0, 0.1, 0.2, 0.3, 0.4],\n",
       "               mask=[False, False, False, False, False],\n",
       "         fill_value='?',\n",
       "              dtype=object),\n",
       "  'params': [{'gamma': 0.0},\n",
       "   {'gamma': 0.1},\n",
       "   {'gamma': 0.2},\n",
       "   {'gamma': 0.3},\n",
       "   {'gamma': 0.4}],\n",
       "  'split0_test_score': array([0.83471434, 0.83628068, 0.83477528, 0.8370243 , 0.8375006 ]),\n",
       "  'split1_test_score': array([0.85365392, 0.85182313, 0.85546824, 0.84880181, 0.85175716]),\n",
       "  'split2_test_score': array([0.85896714, 0.85463647, 0.85710297, 0.8566343 , 0.855494  ]),\n",
       "  'split3_test_score': array([0.85933708, 0.8566608 , 0.85717665, 0.85588196, 0.85838228]),\n",
       "  'split4_test_score': array([0.84742551, 0.84410514, 0.84690976, 0.84581594, 0.84658755]),\n",
       "  'mean_test_score': array([0.8508196 , 0.84870124, 0.85028658, 0.84883166, 0.84994432]),\n",
       "  'std_test_score': array([0.0091418 , 0.00753289, 0.00863469, 0.00719857, 0.00736748]),\n",
       "  'rank_test_score': array([1, 5, 2, 4, 3]),\n",
       "  'split0_train_score': array([0.92657887, 0.92655605, 0.92576384, 0.92466075, 0.92626127]),\n",
       "  'split1_train_score': array([0.92487319, 0.92498134, 0.92462109, 0.92467838, 0.92441296]),\n",
       "  'split2_train_score': array([0.92343752, 0.92392623, 0.92201607, 0.92223855, 0.92223127]),\n",
       "  'split3_train_score': array([0.92395562, 0.9239876 , 0.9243574 , 0.92486219, 0.92544861]),\n",
       "  'split4_train_score': array([0.92640937, 0.92937459, 0.92866273, 0.92813196, 0.92837112]),\n",
       "  'mean_train_score': array([0.92505091, 0.92576516, 0.92508422, 0.92491437, 0.92534504]),\n",
       "  'std_train_score': array([0.00126604, 0.00204006, 0.00216444, 0.00187806, 0.00202838])},\n",
       " {'gamma': 0.0},\n",
       " 0.8508195979070106)"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#上面的例子可以看到mathdepth和child_weight都是5就用这两个继续往下调\n",
    "param_test3 = {\n",
    " 'gamma':[i/10.0 for i in range(0,5)]\n",
    "}\n",
    "gsearch3 = GridSearchCV(estimator = XGBClassifier( learning_rate =0.1, n_estimators=140, max_depth=5,\n",
    " min_child_weight=5, gamma=0, subsample=0.8, colsample_bytree=0.8,\n",
    " objective= 'binary:logistic', nthread=4, scale_pos_weight=1,seed=27), \n",
    " param_grid = param_test3, scoring='roc_auc',n_jobs=4,iid=False, cv=5)\n",
    "gsearch3.fit(train[predictors],train[target])\n",
    "gsearch3.cv_results_, gsearch3.best_params_, gsearch3.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "({'mean_fit_time': array([5.6664741 , 5.58298016, 5.17877312, 5.15516744, 6.04271579,\n",
       "         6.04024234, 5.82371907, 5.67275815, 6.49448543, 6.4449966 ,\n",
       "         6.13099241, 6.00055947, 6.96873446, 6.87623758, 6.27527719,\n",
       "         5.99636569]),\n",
       "  'std_fit_time': array([0.2097919 , 0.08769107, 0.24490857, 0.11555681, 0.22016975,\n",
       "         0.24876471, 0.21561712, 0.175555  , 0.07187469, 0.1453929 ,\n",
       "         0.14446186, 0.20227336, 0.15730138, 0.12532177, 0.12812156,\n",
       "         0.40280888]),\n",
       "  'mean_score_time': array([0.07241631, 0.08141861, 0.06661501, 0.06461515, 0.06721487,\n",
       "         0.06681538, 0.06861572, 0.0656146 , 0.06321421, 0.06741428,\n",
       "         0.06401434, 0.06981592, 0.0770174 , 0.06401405, 0.06627579,\n",
       "         0.05861282]),\n",
       "  'std_score_time': array([0.00431817, 0.02738987, 0.0025776 , 0.00265427, 0.00499689,\n",
       "         0.00285736, 0.00326302, 0.00185568, 0.00147034, 0.00048978,\n",
       "         0.00167357, 0.00798631, 0.02502568, 0.00109672, 0.00392856,\n",
       "         0.00338342]),\n",
       "  'param_colsample_bytree': masked_array(data=[0.6, 0.6, 0.6, 0.6, 0.7, 0.7, 0.7, 0.7, 0.8, 0.8, 0.8,\n",
       "                     0.8, 0.9, 0.9, 0.9, 0.9],\n",
       "               mask=[False, False, False, False, False, False, False, False,\n",
       "                     False, False, False, False, False, False, False, False],\n",
       "         fill_value='?',\n",
       "              dtype=object),\n",
       "  'param_subsample': masked_array(data=[0.6, 0.7, 0.8, 0.9, 0.6, 0.7, 0.8, 0.9, 0.6, 0.7, 0.8,\n",
       "                     0.9, 0.6, 0.7, 0.8, 0.9],\n",
       "               mask=[False, False, False, False, False, False, False, False,\n",
       "                     False, False, False, False, False, False, False, False],\n",
       "         fill_value='?',\n",
       "              dtype=object),\n",
       "  'params': [{'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "   {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "   {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "   {'colsample_bytree': 0.6, 'subsample': 0.9},\n",
       "   {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "   {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "   {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "   {'colsample_bytree': 0.7, 'subsample': 0.9},\n",
       "   {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "   {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "   {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "   {'colsample_bytree': 0.8, 'subsample': 0.9},\n",
       "   {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "   {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "   {'colsample_bytree': 0.9, 'subsample': 0.8},\n",
       "   {'colsample_bytree': 0.9, 'subsample': 0.9}],\n",
       "  'split0_test_score': array([0.83606974, 0.83864757, 0.8368863 , 0.83695307, 0.83475242,\n",
       "         0.83490368, 0.83660013, 0.83759572, 0.8318684 , 0.83230229,\n",
       "         0.83286435, 0.83340639, 0.82734934, 0.83246601, 0.83382404,\n",
       "         0.83836289]),\n",
       "  'split1_test_score': array([0.8533203 , 0.85266084, 0.85329629, 0.85545098, 0.8558859 ,\n",
       "         0.85106545, 0.85892986, 0.8571392 , 0.86081313, 0.84987938,\n",
       "         0.85655839, 0.8545002 , 0.85594581, 0.84935643, 0.85442051,\n",
       "         0.85461556]),\n",
       "  'split2_test_score': array([0.85667878, 0.85591991, 0.86113144, 0.85900258, 0.85437555,\n",
       "         0.85952534, 0.85463532, 0.8596319 , 0.85489579, 0.85814322,\n",
       "         0.86000761, 0.85815625, 0.85615236, 0.85720747, 0.86078946,\n",
       "         0.86232776]),\n",
       "  'split3_test_score': array([0.85478033, 0.85394261, 0.85705624, 0.85483819, 0.85533545,\n",
       "         0.85705578, 0.85494402, 0.85589447, 0.85485552, 0.85518083,\n",
       "         0.8582288 , 0.85595359, 0.85607606, 0.8558986 , 0.8548189 ,\n",
       "         0.85726125]),\n",
       "  'split4_test_score': array([0.84341733, 0.84502414, 0.84317673, 0.84651064, 0.84297367,\n",
       "         0.84439211, 0.84296828, 0.84742998, 0.84336694, 0.84496617,\n",
       "         0.84588505, 0.84342766, 0.84549316, 0.84906227, 0.84567372,\n",
       "         0.8467191 ]),\n",
       "  'mean_test_score': array([0.8488533 , 0.84923901, 0.8503094 , 0.85055109, 0.8486646 ,\n",
       "         0.84938847, 0.84961552, 0.85153825, 0.84915995, 0.84809438,\n",
       "         0.85070884, 0.84908882, 0.84820335, 0.84879816, 0.84990533,\n",
       "         0.85185731]),\n",
       "  'std_test_score': array([0.007865  , 0.00645617, 0.00897343, 0.00793785, 0.0084285 ,\n",
       "         0.00893453, 0.0084135 , 0.00808859, 0.01033143, 0.0090946 ,\n",
       "         0.01018753, 0.00934466, 0.01120131, 0.00881196, 0.00937559,\n",
       "         0.00842546]),\n",
       "  'rank_test_score': array([12,  9,  5,  4, 14,  8,  7,  2, 10, 16,  3, 11, 15, 13,  6,  1]),\n",
       "  'split0_train_score': array([0.93279528, 0.93628986, 0.93462396, 0.93566745, 0.93438987,\n",
       "         0.93514987, 0.93698177, 0.93518807, 0.93677786, 0.93715645,\n",
       "         0.93833161, 0.93683847, 0.93609159, 0.93925375, 0.93936687,\n",
       "         0.93683561]),\n",
       "  'split1_train_score': array([0.93019776, 0.93276315, 0.93390225, 0.93299389, 0.93159367,\n",
       "         0.93423656, 0.93572257, 0.93604481, 0.93309464, 0.93646967,\n",
       "         0.93662312, 0.93858033, 0.93703825, 0.9364957 , 0.93753424,\n",
       "         0.93782621]),\n",
       "  'split2_train_score': array([0.93313762, 0.93288345, 0.93427988, 0.93397227, 0.93316649,\n",
       "         0.93145485, 0.93151603, 0.93515456, 0.93448239, 0.93539561,\n",
       "         0.93596617, 0.9377765 , 0.93562917, 0.93637291, 0.93783954,\n",
       "         0.93728569]),\n",
       "  'split3_train_score': array([0.93141979, 0.93404102, 0.93523936, 0.93502775, 0.9341655 ,\n",
       "         0.93481923, 0.93652761, 0.93744961, 0.93521436, 0.938871  ,\n",
       "         0.93665995, 0.93689369, 0.93586904, 0.9402649 , 0.93673172,\n",
       "         0.9386713 ]),\n",
       "  'split4_train_score': array([0.93708124, 0.93688784, 0.93776755, 0.93858604, 0.93501816,\n",
       "         0.93886069, 0.93986302, 0.93856095, 0.93608059, 0.93830183,\n",
       "         0.93865072, 0.94065201, 0.93777786, 0.93843156, 0.93979788,\n",
       "         0.94023304]),\n",
       "  'mean_train_score': array([0.93292634, 0.93457306, 0.9351626 , 0.93524948, 0.93366674,\n",
       "         0.93490424, 0.9361222 , 0.9364796 , 0.93512997, 0.93723891,\n",
       "         0.93724631, 0.9381482 , 0.93648118, 0.93816377, 0.93825405,\n",
       "         0.93817037]),\n",
       "  'std_train_score': array([0.00232551, 0.00171577, 0.00137473, 0.00190134, 0.00119548,\n",
       "         0.00236918, 0.00269345, 0.0013331 , 0.00127971, 0.00124818,\n",
       "         0.00105083, 0.00140593, 0.0008055 , 0.00152736, 0.00115145,\n",
       "         0.00119902])},\n",
       " {'colsample_bytree': 0.9, 'subsample': 0.9},\n",
       " 0.8518573128737053)"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#gamma为0，调试行列比例\n",
    "param_test4 = {\n",
    " 'subsample':[i/10.0 for i in range(6,10)],\n",
    " 'colsample_bytree':[i/10.0 for i in range(6,10)]\n",
    "}\n",
    "gsearch4 = GridSearchCV(estimator = XGBClassifier( learning_rate =0.1, n_estimators=177, max_depth=5,\n",
    " min_child_weight=5, gamma=0, subsample=0.8, colsample_bytree=0.8,\n",
    " objective= 'binary:logistic', nthread=4, scale_pos_weight=1,seed=27), \n",
    " param_grid = param_test4, scoring='roc_auc',n_jobs=4,iid=False, cv=5)\n",
    "gsearch4.fit(train[predictors],train[target])\n",
    "gsearch4.cv_results_, gsearch4.best_params_, gsearch4.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\Anaconada3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "({'mean_fit_time': array([6.75621161, 6.63017902, 6.63090215, 6.80305314, 4.36593843]),\n",
       "  'std_fit_time': array([0.14281552, 0.17490019, 0.16947111, 0.16617553, 0.61176318]),\n",
       "  'mean_score_time': array([0.06961493, 0.0647017 , 0.06361547, 0.06361527, 0.03640795]),\n",
       "  'std_score_time': array([0.0021545 , 0.00256246, 0.0033829 , 0.00215344, 0.00393054]),\n",
       "  'param_reg_alpha': masked_array(data=[1e-05, 0.01, 0.1, 1, 100],\n",
       "               mask=[False, False, False, False, False],\n",
       "         fill_value='?',\n",
       "              dtype=object),\n",
       "  'params': [{'reg_alpha': 1e-05},\n",
       "   {'reg_alpha': 0.01},\n",
       "   {'reg_alpha': 0.1},\n",
       "   {'reg_alpha': 1},\n",
       "   {'reg_alpha': 100}],\n",
       "  'split0_test_score': array([0.83836289, 0.83550517, 0.83839181, 0.83654387, 0.79800286]),\n",
       "  'split1_test_score': array([0.85461567, 0.85497868, 0.854923  , 0.85636129, 0.80671228]),\n",
       "  'split2_test_score': array([0.86232765, 0.86351025, 0.86126899, 0.86441764, 0.8230453 ]),\n",
       "  'split3_test_score': array([0.85602005, 0.8561819 , 0.85678075, 0.85595864, 0.84167989]),\n",
       "  'split4_test_score': array([0.84671887, 0.84559004, 0.84557087, 0.84744307, 0.81816334]),\n",
       "  'mean_test_score': array([0.85160903, 0.85115321, 0.85138709, 0.8521449 , 0.81752074]),\n",
       "  'std_test_score': array([0.00827961, 0.00967913, 0.00826985, 0.00947039, 0.01491555]),\n",
       "  'rank_test_score': array([2, 4, 3, 1, 5]),\n",
       "  'split0_train_score': array([0.9368356 , 0.93689899, 0.93631162, 0.93546211, 0.83354922]),\n",
       "  'split1_train_score': array([0.93782612, 0.93794941, 0.93679577, 0.93579539, 0.83263525]),\n",
       "  'split2_train_score': array([0.93728567, 0.93842548, 0.93686328, 0.93619343, 0.82932047]),\n",
       "  'split3_train_score': array([0.9375719 , 0.93878603, 0.94003273, 0.93647105, 0.82705784]),\n",
       "  'split4_train_score': array([0.94023297, 0.94012126, 0.94124624, 0.93886236, 0.83508226]),\n",
       "  'mean_train_score': array([0.93795045, 0.93843623, 0.93824993, 0.93655687, 0.83152901]),\n",
       "  'std_train_score': array([0.00118773, 0.00105469, 0.00199753, 0.00120275, 0.00292574])},\n",
       " {'reg_alpha': 1},\n",
       " 0.8521449004634327)"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#得到采样比例为0.9最好，接下来进行正则参数调优\n",
    "param_test6 = {\n",
    " 'reg_alpha':[1e-5, 1e-2, 0.1, 1, 100]\n",
    "}\n",
    "gsearch6 = GridSearchCV(estimator = XGBClassifier( learning_rate =0.1, n_estimators=177, max_depth=5,\n",
    " min_child_weight=5, gamma=0.0, subsample=0.9, colsample_bytree=0.9,\n",
    " objective= 'binary:logistic', nthread=4, scale_pos_weight=1,seed=27), \n",
    " param_grid = param_test6, scoring='roc_auc',n_jobs=4,iid=False, cv=5)\n",
    "gsearch6.fit(train[predictors],train[target])\n",
    "gsearch6.cv_results_, gsearch6.best_params_, gsearch6.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Model Report\n",
      "Accuracy : 0.9854\n",
      "AUC Score (Train): 0.925950\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAt0AAAF7CAYAAAAOmjecAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xe4pEWd9vHvTUbJMiIZZFHEBDoElXUVBQFFUEFBRVQUdVHXd9EVw76g4Bpew6prQiUYSGZUEBARI5IcCaLrEJQBFJA0ooLA/f5R1UzP4YSemVNPn+m5P9fV1+mnup/+Vffpfrq6nqpfyTYREREREdHOcsOuQERERETEqEujOyIiIiKisTS6IyIiIiIaS6M7IiIiIqKxNLojIiIiIhpLozsiIiIiorE0uiMiIiIiGkujOyJiHJKukfQ3SX/pu2ywhI/5NEnzpquOA8Y8TtJRXcaciKQjJH1p2PWIiBiGNLojIia2p+3V+i7XD7MyklYYZvwlsTTXPSJiOqTRHRGxiCTtKOlnkm6T9CtJT+u77RWSrpA0X9JVkl5Tyx8MnA5s0N9zPrYnemxveO1xf6ukS4A7Ja1Q9/uapJskXS3pjQPWezNJrnW8VtKtkl4raTtJl9Tn8z9993+5pJ9K+rik2yX9RtIz+m7fQNKpkm6RNFfSq/tuO0LSVyV9SdIdwGuBtwMvqs/9V5O9Xv2vhaRDJd0o6QZJr+i7fVVJH5L0+1q/n0hadYD/0ctrrPn19XvJIK9fRMSSSM9DRMQikLQh8F3gAOB7wDOAr0nayvZNwI3Ac4CrgKcCp0u6wPbFknYHvmR7o77HGyTs/sCzgZuB+4BvA9+q5RsB35f0W9tnDPg0dgC2rPU7tT6PZwIrAr+U9BXb5/bd96vAusDzga9L2tz2LcCJwOXABsBWwFmSrrJ9dt13L2Bf4GXAyvUx/sn2S/vqMuHrVW9/GLAmsCGwC/BVSd+0fSvwQeDRwJOBP9a63jfZ/wj4K/AxYDvbv5W0PrDOgK9bRMRiS093RMTEvll7Sm+T9M1a9lLgNNun2b7P9lnAhcAeALa/a/tKF+cCZwL/vIT1+Jjta23/DdgOmGX73bbvtn0V8Flgv0V4vCNt/932mcCdwIm2b7R9HfBjYNu++94I/Lftf9g+Gfgt8GxJGwM7AW+tjzUH+Bylodvzc9vfrK/T38aryACv1z+Ad9f4pwF/AR4paTnglcC/2b7O9r22f2b7Lqb4H1F+uDxG0qq2b7B9+SK8dhERiyWN7oiIie1te6162buWbQrs29cYv43S+FwfQNLuks6rQy5uozT01l3Celzbd31TyhCV/vhvB9ZbhMf7U9/1v42zvVrf9nW23bf9e0rP9gbALbbnj7ltwwnqPa4BXq8/276nb/uvtX7rAqsAV47zsBP+j2zfCbyIMtzlBknfrT3gERFNpdEdEbForgW+2NcYX8v2g22/T9LKwNcowx7Ws70WcBrQG0PicR7vTuBBfdsPG+c+/ftdC1w9Jv7qtvcYZ7/psKEWHgOzCXB9vawjafUxt103Qb0fsD3A6zWZm4G/A1uMc9uE/yMA22fY3oXyQ+k3lDMFERFNpdEdEbFovgTsKelZkpaXtEqd8LcRsBJl7PJNwD11DPeuffv+CXiIpDX7yuYAe0haR9LDgDdNEf984I46uXLVWofHSNpu2p7hwh4KvFHSipL2BR5FGbpxLfAz4L31NXgccBDw5Uke60/AZnVoCEz9ek3I9n3AMcCH64TO5SU9qTbkJ/wfSVpP0nNVJrbeRRmucu8iviYREYssje6IiEVQG5t7UYZ03ETpVX0LsFwdavFG4BTgVuDFlImKvX1/Q5l8eFUd9rAB8EXgV8A1lPHMJ08R/15gT2Ab4GpKj+/nKJMNW/gFZdLlzcB7gH1s/7netj+wGaXX+xvA4XX89ES+Uv/+WdLFU71eA3gzcClwAXAL8H7K/2HC/1G9HFrrfAvwL8C/LkLMiIjFooWH6kVERBSSXg68yvZOw65LRMTSLj3dERERERGNpdEdEREREdFYhpdERERERDSWnu6IiIiIiMbS6I6IiIiIaGyFYVeghXXXXdebbbbZsKsRERERESPuoosuutn2rKnuN5KN7s0224wLL7xw2NWIiIiIiBEn6feD3C/DSyIiIiIiGkujOyIiIiKisTS6IyIiIiIaS6M7IiIiIqKxNLojIiIiIhpLozsiIiIiorE0uiMiIiIiGkujOyIiIiKisZFcHGcqmx323cXe95r3PXsaaxIRERERy4L0dEdERERENNas0S1pFUnnS/qVpMslvauWHyfpaklz6mWbWi5JH5M0V9Ilkp7Q91gHSvpdvRzYqs4RERERES20HF5yF7Cz7b9IWhH4iaTT621vsf3VMfffHdiyXnYAPgXsIGkd4HBgNmDgIkmn2r61Yd0jIiIiIqZNs55uF3+pmyvWiyfZZS/gC3W/84C1JK0PPAs4y/YttaF9FrBbq3pHREREREy3pmO6JS0vaQ5wI6Xh/It603vqEJKPSFq5lm0IXNu3+7xaNlF5RERERMRSoWmj2/a9trcBNgK2l/QY4G3AVsB2wDrAW+vdNd5DTFK+EEkHS7pQ0oU33XTTtNQ/IiIiImI6dJK9xPZtwA+B3WzfUIeQ3AUcC2xf7zYP2Lhvt42A6ycpHxvjaNuzbc+eNWtWg2cREREREbF4WmYvmSVprXp9VeCZwG/qOG0kCdgbuKzucirwsprFZEfgdts3AGcAu0paW9LawK61LCIiIiJiqdAye8n6wPGSlqc07k+x/R1JP5A0izJsZA7w2nr/04A9gLnAX4FXANi+RdKRwAX1fu+2fUvDekdERERETKtmjW7blwDbjlO+8wT3N3DIBLcdAxwzrRWMiIiIiOhIVqSMiIiIiGgsje6IiIiIiMbS6I6IiIiIaCyN7oiIiIiIxtLojoiIiIhoLI3uiIiIiIjG0uiOiIiIiGgsje6IiIiIiMbS6I6IiIiIaCyN7oiIiIiIxtLojoiIiIhoLI3uiIiIiIjG0uiOiIiIiGgsje6IiIiIiMbS6I6IiIiIaCyN7oiIiIiIxtLojoiIiIhoLI3uiIiIiIjGVhh2BZYpR6y5hPvfPj31iIiIiIhOpac7IiIiIqKxZo1uSatIOl/SryRdLuldtXxzSb+Q9DtJJ0taqZavXLfn1ts363ust9Xy30p6Vqs6R0RERES00LKn+y5gZ9uPB7YBdpO0I/B+4CO2twRuBQ6q9z8IuNX2PwEfqfdD0tbAfsCjgd2AT0pavmG9IyIiIiKmVbNGt4u/1M0V68XAzsBXa/nxwN71+l51m3r7MySplp9k+y7bVwNzge1b1TsiIiIiYro1HdMtaXlJc4AbgbOAK4HbbN9T7zIP2LBe3xC4FqDefjvwkP7ycfaJiIiIiJjxBm50S3rwoj647XttbwNsROmdftR4d+uFmOC2icrH1u9gSRdKuvCmm25a1KpGRERERDQzZaNb0pMl/Rq4om4/XtInFyWI7duAHwI7AmtJ6qUq3Ai4vl6fB2xcY6wArAnc0l8+zj79MY62Pdv27FmzZi1K9SIiIiIimhqkp/sjwLOAPwPY/hXw1Kl2kjRL0lr1+qrAMykN93OAferdDgS+Va+fWrept//Atmv5fjW7yebAlsD5A9Q7IiIiImJGGGhxHNvXljmN97t3gN3WB46vmUaWA06x/Z3aa36SpKOAXwKfr/f/PPBFSXMpPdz71diXSzoF+DVwD3CI7UHiR0RERETMCIM0uq+V9GTANaf2G6lDTSZj+xJg23HKr2Kc7CO2/w7sO8FjvQd4zwB1jYiIiIiYcQYZXvJa4BBKxpB5lJzbh7SsVERERETEKJm0p7sODTnA9ks6qk9ERERExMiZtKe7jp3eq6O6RERERESMpEHGdP9U0v8AJwN39gptX9ysVhERERERI2SQRveT699395X1lnOPiIiIiIgpTNnotv30LioSERERETGqBlmRck1JH+4tsS7pQ5LW7KJyERERERGjYJCUgccA84EX1ssdwLEtKxURERERMUoGGdO9he0X9G2/S9KcVhWKiIiIiBg1g/R0/03STr0NSU8B/tauShERERERo2WQnu7XAcf3jeO+FXh5sxpFRERERIyYQbKXzAEeL2mNun1H81pFRERERIyQQbKX/JektWzfYfsOSWtLOqqLykVEREREjIJBxnTvbvu23obtW4E92lUpIiIiImK0DNLoXl7Syr0NSasCK09y/4iIiIiI6DPIRMovAWdLOpay/PsrgeOb1ioiIiIiYoQMMpHyA5IuAZ5Zi460fUbbakVEREREjI5Berqx/T1JFwBPBW5uW6WIiIiIiNEy4ZhuSd+R9Jh6fX3gMsrQki9KelNH9YuIiIiIWOpNNpFyc9uX1euvAM6yvSewA6XxHRERERERA5is0f2PvuvPAE4DsD0fuG+qB5a0saRzJF0h6XJJ/1bLj5B0naQ59bJH3z5vkzRX0m8lPauvfLdaNlfSYYv6JCMiIiIihmmyMd3XSnoDMA94AvA9uD9l4IoDPPY9wKG2L5a0OnCRpLPqbR+x/cH+O0vaGtgPeDSwAfB9SY+oN38C2KXW5QJJp9r+9UDPMCIiIiJiyCbr6T6I0gB+OfCivgVydgSOneqBbd9g++J6fT5wBbDhJLvsBZxk+y7bVwNzge3rZa7tq2zfDZxU7xsRERERsVSYsNFt+0bbr7W9l+0z+8rPGdtLPRVJmwHbAr+oRa+XdImkYyStXcs2BK7t221eLZuofGyMgyVdKOnCm266aVGqFxERERHR1CArUi4RSasBXwPeZPsO4FPAFsA2wA3Ah3p3HWd3T1K+cIF9tO3ZtmfPmjVrWuoeERERETEdBsrTvbgkrUhpcH/Z9tcBbP+p7/bPAt+pm/OAjft23wi4vl6fqDwiIiIiYsZr1tMtScDngStsf7ivfP2+uz2Pkv8b4FRgP0krS9oc2BI4H7gA2FLS5pJWoky2PLVVvSMiIiIiptuUPd01g8ingPVsP0bS44Dn2j5qil2fAhwAXCppTi17O7C/pG0oQ0SuAV4DYPtySacAv6ZkPjnE9r21Dq8HzgCWB46xffmiPc2IiIiIiOEZZHjJZ4G3AJ8BsH2JpBOASRvdtn/C+OOxT5tkn/cA7xmn/LTJ9ouIiIiImMkGGV7yINvnjym7p0VlIiIiIiJG0SCN7pslbUHNGCJpH0rWkYiIiIiIGMAgw0sOAY4GtpJ0HXA18NKmtYqIiIiIGCFTNrptXwU8U9KDgeXq6pIRERERETGgKYeXSPovSWvZvtP2fElrS5oqc0lERERERFSDjOne3fZtvQ3btwJ7tKtSRERERMRoGaTRvbyklXsbklYFVp7k/hERERER0WeQiZRfAs6WdCwlg8krgeOb1ioiIiIiYoQMMpHyA5IuBZ5BWezmSNtnNK9ZRERERMSIGKSnG9unA6c3rktERERExEgaJHvJ8yX9TtLtku6QNF/SHV1ULiIiIiJiFAzS0/0BYE/bV7SuTERERETEKBoke8mf0uCOiIiIiFh8g/R0XyjpZOCbwF29Qttfb1ariIiIiIgRMkijew3gr8CufWUG0uiOiIiIiBjAICkDX9FFRSIiIiIiRtWUjW5JqwAHAY8GVumV235lw3pFRERERIyMQSZSfhF4GPAs4FxgI2B+y0pFRERERIySQRrd/2T7P4E7bR8PPBt4bNtqRURERESMjkEa3f+of2+T9BhgTWCzZjWKiIiIiBgxg2QvOVrS2sA7gVOB1YD/nGonSRsDX6AMTbkPONr2RyWtA5xMabhfA7zQ9q2SBHwU2IOSLeXlti+uj3VgjQ9wVO1xj0Xw2OMX/+TEpQdeOo01iYiIiFj2DNLTfbbtW23/yPbDbT8UOHOA/e4BDrX9KGBH4BBJWwOH1cfcEji7bgPsDmxZLwcDnwKojfTDgR2A7YHD64+AiIiIiIilwiCN7q+NU/bVqXayfUOvp9r2fOAKYENgL6DXU308sHe9vhfwBRfnAWtJWp8ygfMs27fYvhU4C9htgHpHRERERMwIEw4vkbQVJU3gmpKe33fTGvSlDhyEpM2AbYFfAOvZvgFKw1zSQ+vdNgSu7dttXi2bqHxsjIMpPeRssskmi1K9iIiIiIimJhvT/UjgOcBawJ595fOBVw8aQNJqlN7yN9m+owzdHv+u45R5kvKFC+yjgaMBZs+e/YDbIyIiIiKGZcJGt+1vSfoO8Fbb/7U4Dy5pRUqD+8u2e8vG/0nS+rWXe33gxlo+D9i4b/eNgOtr+dPGlP9wceoT3btiq0ct0f6P+s0V01STiIiIiOGZdEy37XuBXRbngWs2ks8DV9j+cN9NpwIH1usHAt/qK3+Zih2B2+swlDOAXSWtXSdQ7lrLIiIiIiKWCoOkDPyZpP+hpPm7s1fYmyQ5iacABwCXSppTy94OvA84RdJBwB+Afettp1HSBc6lpAx8RY1zi6QjgQvq/d5t+5YB6h0RERERMSMM0uh+cv377r4yAztPtpPtnzD+eGyAZ4xzfwOHTPBYxwDHTFnTiIiIiIgZaMpGt+2nd1GRiIiIiIhRNWWebklrSvqwpAvr5UOS1uyichERERERo2CQxXGOoaQJfGG93AEc27JSERERERGjZJAx3VvYfkHf9rv6JkZGRERERMQUBunp/puknXobkp4C/K1dlSIiIiIiRssgPd2vA46v47gF3MKCPNsRERERETGFQbKXzAEeL2mNun1H81pFRERERIyQKRvdkh4CHA7sBFjSTygL1Py5deUilsQnXvuDxd73kE9PmoY+IiIiYpEMMqb7JOAm4AXAPvX6yS0rFRERERExSgYZ072O7SP7to+StHerCkVEREREjJpBerrPkbSfpOXq5YXAd1tXLCIiIiJiVAzS6H4NcAJwd72cBPy7pPmSMqkyIiIiImIKg2QvWb2LikREREREjKpBxnQj6XHAZv33t/31RnWKiIiIiBgpg6QMPAZ4HHA5cF8tNpBGd0RERETEAAbp6d7R9tbNaxIRERERMaIGaXT/XNLWtn/dvDYRI+BDL3rOYu976MnfmcaaRERExEwxSKP7eErD+4/AXYAA235c05pFRERERIyIQRrdxwAHAJeyYEx3REREREQMaJA83X+wfartq23/vneZaidJx0i6UdJlfWVHSLpO0px62aPvtrdJmivpt5Ke1Ve+Wy2bK+mwRX6GERERERFDNkhP928knQB8mzK8BBgoZeBxwP8AXxhT/hHbH+wvkLQ1sB/waGAD4PuSHlFv/gSwCzAPuEDSqRlfHjG+eYf9eLH33eh9/zyNNYmIiIh+gzS6V6U0tnftK5syZaDtH0nabMB67AWcZPsu4GpJc4Ht621zbV8FIOmket80uiMiIiJiqTHIipSvmOaYr5f0MuBC4FDbtwIbAuf13WdeLQO4dkz5DtNcn4iIiIiIpiZsdEv6OKVHe1y237gY8T4FHFkf90jgQ8ArKRlRHhCC8cecj1snSQcDBwNssskmi1G1iIiIiIg2JuvpvnC6g9n+U++6pM8CvaTE84CN++66EXB9vT5R+djHPho4GmD27NkT/liIiIiIiOjahI1u28dPdzBJ69u+oW4+D+hlNjkVOEHShykTKbcEzqf0gG8paXPgOspkyxdPd70iIiIiIloaZCLlYpF0IvA0YF1J84DDgadJ2oYyROQa4DUAti+XdAplguQ9wCG2762P83rgDGB54Bjbl7eqc0QsniOOOGIo+0ZERCwtmjW6be8/TvHnJ7n/e4D3jFN+GnDaNFYtIiIiIqJTgyyOExERERERS2DKRrekR0g6u7eypKTHSXpn+6pFRERERIyGQXq6Pwu8DfgHgO1LKBMaIyIiIiJiAIOM6X6Q7fOlhVJp39OoPhERi+TsH2yx2Ps+Y+crp7EmERERExuk0X2zpC2oi9JI2ge4YfJdIiJG28POmbPY+/7x6dtMY00iImJpMEij+xDKojNbSboOuBp4SdNaRURERESMkEkb3ZKWA2bbfqakBwPL2Z7fTdUiIiIiIkbDpBMpbd8HvL5evzMN7oiIiIiIRTdI9pKzJL1Z0saS1uldmtcsIiIiImJEDDKm+5X17yF9ZQYePv3ViYiIyWx22HeXaP9r3vfsaapJREQsiikb3bY376IiERERERGjaspGt6SXjVdu+wvTX52IiIiIiNEzyPCS7fqurwI8A7gYSKM7ImIZsiRDWzKsJSKWdYMML3lD/7akNYEvNqtRRERERMSIGSR7yVh/Bbac7opERERERIyqQcZ0f5u6BDylkb418JWWlYqIiIiIGCWDjOn+YN/1e4Df257XqD4RERERESNnkOEle9g+t15+anuepPc3r1lERERExIgYpNG9yzhlu093RSIiIiIiRtWEw0skvQ74V+Dhki7pu2l14KetKxYRERERMSom6+k+AdgTOLX+7V2eaPulUz2wpGMk3Sjpsr6ydSSdJel39e/atVySPiZprqRLJD2hb58D6/1/J+nAxXyeERERERFDM2Gj2/bttq+xvb/t3wN/o2QxWU3SJgM89nHAbmPKDgPOtr0lcHbdhjJcZct6ORj4FJRGOnA4sAOwPXB4r6EeEREREbG0GCRl4J7Ah4ENgBuBTYErgEdPtp/tH0nabEzxXsDT6vXjgR8Cb63lX7Bt4DxJa0lav973LNu31LqcRWnInzjlM4uIiNFwxJpLuP/t01OPiIglMMhEyqOAHYH/tb05ZRn4xR3TvZ7tGwDq34fW8g2Ba/vuN6+WTVQeEREREbHUGKTR/Q/bfwaWk7Sc7XOAbaa5HhqnzJOUP/ABpIMlXSjpwptuumlaKxcRERERsSQGaXTfJmk14MfAlyV9lLJIzuL4Ux02Qv17Yy2fB2zcd7+NgOsnKX8A20fbnm179qxZsxazehERERER02+QRvdewF+BNwHfA66kZDFZHKcCvQwkBwLf6it/Wc1isiNwex1+cgawq6S16wTKXWtZRERERMRSY8qJlLbvlLQpsKXt4yU9CFh+qv0knUiZCLmupHmULCTvA06RdBDwB2DfevfTgD2AuZQG/itq7FskHQlcUO/37t6kyoiIiIiIpcUg2UteTUnjtw6wBWUi46cpEyonZHv/CW56wH41a8khEzzOMcAxU9UzIiIiImKmGmR4ySHAU4A7AGz/jgVZRyIiIiIiYgqDNLrvsn13b0PSCkyQQSQiIiIiIh5okEb3uZLeDqwqaRfgK8C321YrIiIiImJ0DNLoPgy4CbgUeA1l0uM7W1YqIiIiImKUTDiRUtImtv9g+z7gs/USERERERGLaLKe7m/2rkj6Wgd1iYiIiIgYSZM1uvuXYH9464pERERERIyqyRrdnuB6REREREQsgskWx3m8pDsoPd6r1uvUbdteo3ntIiIiIiJGwISNbttTLvUeERERERFTGyRlYERERERELIE0uiMiIiIiGkujOyIiIiKisTS6IyIiIiIaS6M7IiIiIqKxNLojIiIiIhpLozsiIiIiorE0uiMiIiIiGkujOyIiIiKisTS6IyIiIiIaG0qjW9I1ki6VNEfShbVsHUlnSfpd/bt2LZekj0maK+kSSU8YRp0jIiIiIhbXMHu6n257G9uz6/ZhwNm2twTOrtsAuwNb1svBwKc6r2lERERExBJYYdgV6LMX8LR6/Xjgh8Bba/kXbBs4T9Jakta3fcNQahkREcuMxx7/2MXe99IDL53GmkTE0m5YPd0GzpR0kaSDa9l6vYZ0/fvQWr4hcG3fvvNq2UIkHSzpQkkX3nTTTQ2rHhERERGxaIbV0/0U29dLeihwlqTfTHJfjVPmBxTYRwNHA8yePfsBt0dEREREDMtQerptX1//3gh8A9ge+JOk9QHq3xvr3ecBG/ftvhFwfXe1jYiIiIhYMp03uiU9WNLqvevArsBlwKnAgfVuBwLfqtdPBV5Ws5jsCNye8dwRERERsTQZxvCS9YBvSOrFP8H29yRdAJwi6SDgD8C+9f6nAXsAc4G/Aq/ovsoRERHduWKrRy32vo/6zRVLFPsTr/3BYu97yKd3XqLYEaOs80a37auAx49T/mfgGeOUGzikg6pFRETEkHzoRc9Z7H0PPfk701iTiDayImVERERERGMzKU93RERERKfmHfbjJdp/o/f98zTVJEZderojIiIiIhpLozsiIiIiorEML4mIiIgYgiOOOGIo+8ZwpKc7IiIiIqKxNLojIiIiIhpLozsiIiIiorE0uiMiIiIiGkujOyIiIiKisTS6IyIiIiIaS6M7IiIiIqKxNLojIiIiIhpLozsiIiIiorGsSBkRERGxDDn7B1ss0f7P2PnKaarJsiU93RERERERjaXRHRERERHRWIaXREREREQnHnbOnMXe949P32Yaa9K99HRHRERERDSWRndERERERGNLTaNb0m6SfitprqTDhl2fiIiIiIhBLRWNbknLA58Adge2BvaXtPVwaxURERERMZilotENbA/MtX2V7buBk4C9hlyniIiIiIiByPaw6zAlSfsAu9l+Vd0+ANjB9uv77nMwcHDdfCTw2yUIuS5w8xLsv7TFHWbsZS3uMGPnOS8bsZe1uMOMnee8bMTOcx79uEsae1Pbs6a609KSMlDjlC30a8H20cDR0xJMutD27Ol4rKUh7jBjL2txhxk7z3nZiL2sxR1m7DznZSN2nvPox+0q9tIyvGQesHHf9kbA9UOqS0RERETEIllaGt0XAFtK2lzSSsB+wKlDrlNERERExECWiuEltu+R9HrgDGB54BjblzcM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\n",
      "text/plain": [
       "<Figure size 864x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#最好的正则为1，接下来降低学习率并提高一点树的数量继续来看看效果\n",
    "xgb2 = XGBClassifier(\n",
    " learning_rate =0.01,\n",
    " n_estimators=5000,\n",
    " max_depth=5,\n",
    " min_child_weight=5,\n",
    " gamma=0,\n",
    " subsample=0.9,\n",
    " colsample_bytree=0.9,\n",
    " reg_alpha=1,\n",
    " objective= 'binary:logistic',\n",
    " nthread=4,\n",
    " scale_pos_weight=1,\n",
    " seed=27)\n",
    "modelfit(xgb2, train, predictors)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
